home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / lib / include / dev / scsi.h < prev    next >
C/C++ Source or Header  |  1989-07-02  |  3KB  |  80 lines

  1. /*
  2.  * scsi.h --
  3.  *
  4.  *    Declarations of the user level interface to SCSI devices. The
  5.  *    interface defined in this file allows user level programs to 
  6.  *    send arbitrary SCSI commands to SCSI devices.  The interface
  7.  *    users Sprite Io_Controls to send the SCSI command block and 
  8.  *    a data buffer to the device. The SCSI status byte, command data, 
  9.  *    and any sense data is returned using the
  10.  *    out buffer of the Io_Control. The IO_COntrols defined in this
  11.  *    file should work with any SCSI device (ie SCSI Disk, SCSI Tape, 
  12.  *    SCSI Worm, etc) as well as the HBA device driver.
  13.  *
  14.  * Copyright 1989 Regents of the University of California
  15.  * Permission to use, copy, modify, and distribute this
  16.  * software and its documentation for any purpose and without
  17.  * fee is hereby granted, provided that the above copyright
  18.  * notice appear in all copies.  The University of California
  19.  * makes no representations about the suitability of this
  20.  * software for any purpose.  It is provided "as is" without
  21.  * express or implied warranty.
  22.  *
  23.  * $Header: /sprite/src/lib/include/dev/RCS/scsi.h,v 1.1 89/04/12 21:03:58 mendel Exp Locker: mendel $ SPRITE (Berkeley)
  24.  */
  25.  
  26. #ifndef _DEVSCSI
  27. #define _DEVSCSI
  28.  
  29. /*   
  30.  * Scsi-device specific commands:
  31.  *
  32.  *   IOC_SCSI_COMMAND        Issue a SCSI command
  33.  */
  34. #define IOC_SCSI            (7 << 16)
  35. #define IOC_SCSI_COMMAND        (IOC_SCSI | 0x1)
  36.  
  37. /*
  38.  * IOC_SCSI_COMMAND
  39.  * The one IN parameter specifies the SCSI command block, data buffer,
  40.  * and data transfer direction.
  41.  */
  42. typedef struct Dev_ScsiCommand {
  43.     int        bufferLen;    /* The length of the data buffer in bytes. */
  44.     int        dataOffset;    /* Offset into the in IO Control input buffer
  45.                  * of the start of the data buffer. If 
  46.                  * dataOffset equals the size of the input
  47.                  * buffer then the commands is assumed to 
  48.                  * receive data and the data is returned 
  49.                  * in the output buffer. */
  50.     int        commandLen;    /* Length in bytes of the SCSI command block. */
  51.     /*
  52.      * The SCSI command block immediately follows the Dev_ScsiCommand 
  53.      * structure and extends for commandLen bytes.  The input data for
  54.      * the command starts at dataOffset-sizeof(Dev_ScsiCommand) and
  55.      * extends to the end of the input buffer. The input data should start
  56.      * on a 32 bit word boundry.
  57.      */
  58. } Dev_ScsiCommand;
  59.  
  60. /*
  61.  * IOC_SCSI_COMMAND returns in the output parameter the scsi Status
  62.  * block.
  63.  */
  64.  
  65. typedef struct Dev_ScsiStatus {
  66.     int        statusByte;    /* Scsi status byte as returned by the
  67.                  * device. */
  68.     int  amountTransferred;    /* Number of data bytes transferred by the
  69.                  * command. If the command received data
  70.                  * then the data follows the Dev_ScsiStatus
  71.                  * structure. */
  72.     int       senseDataLen;    /* The number of bytes of sense data returned
  73.                  * by the device.  The sense data immediately
  74.                  * follows the received data in
  75.                  * the output buffer. */
  76. } Dev_ScsiStatus;
  77.  
  78.  
  79. #endif /* _DEVSCSI */
  80.